package br.tce.ufs.appcoleta_mobile.database;

import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.content.Context;
import br.tce.ufs.appcoleta_mobile.dao.UnidadeGestoraDao;
import br.tce.ufs.appcoleta_mobile.dao.UsuarioDao;
import br.tce.ufs.appcoleta_mobile.entities.FatorGerador;
import br.tce.ufs.appcoleta_mobile.entities.FotoObra;
import br.tce.ufs.appcoleta_mobile.entities.GeoObra;
import br.tce.ufs.appcoleta_mobile.entities.LocalidadeObra;
import br.tce.ufs.appcoleta_mobile.entities.ObraServico;
import br.tce.ufs.appcoleta_mobile.entities.TipoFatorGerador;
import br.tce.ufs.appcoleta_mobile.entities.TipoGeo;
import br.tce.ufs.appcoleta_mobile.entities.UnidadeGestora;
import br.tce.ufs.appcoleta_mobile.entities.Usuario;

public class ParserXML_DB {

	Usuario usuario;
	UsuarioDao usuarioDao;
	UnidadeGestora unidadeGestora;
	UnidadeGestoraDao unidadeGestoraDao;
	ObraServico obraServico;
	TipoFatorGerador tipoFator;
	TipoGeo tipoGeo;
	LocalidadeObra localidadeObra;
	FatorGerador fatorGerador;
	FotoObra fotoObra;
	GeoObra geoObra;
	NodeList nodeEntidade;
	Node nodeCampo;
	String campo;

	public void ProcessarXml_BD(Context c) {
		try {
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(new FileInputStream(""));
			doc.getDocumentElement().normalize();

			unidadeGestora = new UnidadeGestora();
			unidadeGestoraDao = new UnidadeGestoraDao(c);
			nodeEntidade = doc.getElementsByTagName("unidadeGestora");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("cd_Unidade")
							.item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					unidadeGestora.setCd_Unidade(campo);
					nodeCampo = element.getElementsByTagName("nm_Unidade")
							.item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					unidadeGestora.setNm_Unidade(campo);
					nodeCampo = element.getElementsByTagName("sg_UnidGestora")
							.item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					unidadeGestora.setSg_UnidGestora(campo);
					nodeCampo = element.getElementsByTagName("tp_UnidGestora")
							.item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					unidadeGestora.setTp_UnidGestora(campo);
					unidadeGestoraDao.insert(unidadeGestora);

				}
			}
			usuario = new Usuario();
			usuarioDao = new UsuarioDao(c);
			nodeEntidade = doc.getElementsByTagName("usuario");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("cd_Usuario").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					usuario.setCd_Usuario(Integer.parseInt(campo));
					nodeCampo = element.getElementsByTagName("nm_Login").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					usuario.setNm_Login(campo);
					nodeCampo = element.getElementsByTagName("nm_Senha").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					usuario.setNm_Senha(campo);
					nodeCampo = element.getElementsByTagName("cd_Unidade").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					usuario.setUnd_Gestora(unidadeGestoraDao.getById(Integer.parseInt(campo)));
					usuarioDao.insert(usuario);
				}
			}
			
			tipoFator = new TipoFatorGerador();
			nodeEntidade = doc.getElementsByTagName("tipo_fator_gerador");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("cd_TipoFatorGerador").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoFator.setCd_TipoFatorGerador(Integer.parseInt(campo));
					nodeCampo = element.getElementsByTagName("de_TipoFatorGerador").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoFator.setDe_TipoFatorGerador(campo);
					nodeCampo = element.getElementsByTagName("cd_precisa_foto").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoFator.setCd_precisa_foto(Boolean.parseBoolean(campo));
					nodeCampo = element.getElementsByTagName("cd_precisa_geo").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoFator.setCd_precisa_geo(Boolean.parseBoolean(campo));
				}
			}
			
			tipoGeo = new TipoGeo();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("cd_TipoGeo").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoGeo.setCd_TipoGeo(Integer.parseInt(campo));
					nodeCampo = element.getElementsByTagName("nm_TipoGeo").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					tipoGeo.setNm_TipoGeo(campo);
				}
			}
			
			fatorGerador = new FatorGerador();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("sq_Obra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
				}
			}
			
			obraServico = new ObraServico();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("sq_Obra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					obraServico.setSq_Obra(Integer.parseInt(campo));
					nodeCampo = element.getElementsByTagName("dt_AnoObra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					obraServico.setDt_AnoObra(campo);
					nodeCampo = element.getElementsByTagName("de_ObjetObra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					obraServico.setDe_ObjetObra(campo);
					nodeCampo = element.getElementsByTagName("cd_Unidade").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					obraServico.setUnidGestora(unidadeGestoraDao.getById(Integer.parseInt(campo)));
				}
			}
			
			localidadeObra = new LocalidadeObra();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("sq_localidade").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					localidadeObra.setSq_localidade(Integer.parseInt(campo));
					nodeCampo = element.getElementsByTagName("nm_Municipio").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
					//localidadeObra.setNm_Municipio(campo);
				}
			}
			
			geoObra = new GeoObra();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("sq_Obra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
				}
			}
			
			fotoObra = new FotoObra();
			nodeEntidade = doc.getElementsByTagName("tipo_geo");
			for (int i = 0; i < nodeEntidade.getLength(); i++) {
				Node item = nodeEntidade.item(i);
				if (item.getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element) item;
					nodeCampo = element.getElementsByTagName("sq_Obra").item(0).getChildNodes().item(0);
					campo = nodeCampo.getNodeValue();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
	}

}
